#include "DataStorageIO.h"
#include <EEPROM.h>
#include <PinName.h>
#include "log.h"
DataStorageIO::DataStorageIO(Mail<>& mb):_mb(mb)
{

}

bool DataStorageIO::load()
{
    if(this->read_data_storage_eof() != DATA_STORAGE_EOF){
        return false;
    }
    for(uint32_t i=0;i<data_storage_header_size();i++){
         module_header_reg().data[i] = EEPROM.read(i);
    }
    
    //载入模组通用信息
    for(uint32_t i=(DATA_STORAGE_HEADER_REG_SIZE);i<(DATA_STORAGE_GENERAL_REG_SIZE+DATA_STORAGE_HEADER_REG_SIZE);i++){
         module_reg().module_general_reg.data[i-DATA_STORAGE_HEADER_REG_SIZE] = EEPROM.read(i);
    }
    return true;

}
int DataStorageIO::read_data_storage_eof()
{
    int eof_address= DATA_STORAGE_STATUS_EOF_ADDRESS;
    _data_storage_eof._AA = EEPROM.read(eof_address);
    _data_storage_eof._55 = EEPROM.read(eof_address+1);
    return _data_storage_eof.value;
}

void DataStorageIO::make_default()
{
    //生成头部信息
    module_header_reg().module_number.value      = 0x0001;
    module_header_reg().hardware_version         = 0x01;
    module_header_reg().software_version         = 0x01;
    module_header_reg().module_type              = 1;
    module_header_reg().protocol_part_1.value    = 0x87;
    module_header_reg().protocol_part_2.value    = 0x01;
    strcpy((char*)& module_header_reg().module_name[0],"WF1-IO_Expander");
    
    //写入头部信息到EEPROM
    for(uint8_t i=0;i<data_storage_header_size();i++){
        EEPROM.write(i, module_header_reg().data[i]); 
    }

    //生成寄存器默认配置
    module_general_reg_t& module_general_reg = DataStorageIO::module_reg().module_general_reg;
    module_general_reg.master_update_reg.value                        = 0;
    module_general_reg.slave_interrupt_reg.value                      = 0;
    module_general_reg.mode_select_reg.value                    = 0;//手动
    module_general_reg.io_direction_reg.value                   = 0;//输入
    module_general_reg.io_type_reg.value                  = 0;//数字电平
    module_general_reg.io_voltage_reg.value                     = 0;//低压
    module_general_reg.condition_action_enable_reg.value        = 0;//全部禁止
    module_general_reg.aio_level_reg.value            = 0;//A0-A3输入
    module_general_reg.dio_level_reg.value            = 0;//D0-D3输入
    module_general_reg.ain_reg.A0.value            = 0;//读取模拟量AD0值
    module_general_reg.ain_reg.A1.value            = 0;//读取模拟量AD1值
    module_general_reg.ain_reg.A2.value            = 0;//读取模拟量AD2值
    module_general_reg.ain_reg.A3.value            = 0;//读取模拟量AD3值
    module_general_reg.pwm_reg.freq.value            = 1;//PWM输出频率125Hz
    module_general_reg.pwm_reg.duty_cycle.value      = 50;//PWM脉宽50%
    module_general_reg.general_input_condition_reg.A0[0].value  = 3071;//输入条件A0-0
    module_general_reg.general_input_condition_reg.A0[1].value  = 19455;//输入条件A0-1
    module_general_reg.general_input_condition_reg.A0[2].value  = 35839;//输入条件A0-2
    module_general_reg.general_input_condition_reg.A0[3].value  = 52223;//输入条件A0-3
    module_general_reg.general_input_condition_reg.A1[0].value  = 3071;//输入条件A1-0
    module_general_reg.general_input_condition_reg.A1[1].value  = 19455;//输入条件A1-1
    module_general_reg.general_input_condition_reg.A1[2].value  = 35839;//输入条件A1-2
    module_general_reg.general_input_condition_reg.A1[3].value  = 52223;//输入条件A1-3
    module_general_reg.general_input_condition_reg.A2[0].value  = 3071;//输入条件A2-0
    module_general_reg.general_input_condition_reg.A2[1].value  = 19455;//输入条件A2-1
    module_general_reg.general_input_condition_reg.A2[2].value  = 35839;//输入条件A2-2
    module_general_reg.general_input_condition_reg.A2[3].value  = 52223;//输入条件A2-3
    module_general_reg.general_input_condition_reg.A3[0].value  = 3071;//输入条件A3-0
    module_general_reg.general_input_condition_reg.A3[1].value  = 19455;//输入条件A3-1
    module_general_reg.general_input_condition_reg.A3[2].value  = 35839;//输入条件A3-2
    module_general_reg.general_input_condition_reg.A3[3].value  = 52223;//输入条件A3-3

    for(uint8_t i=0;i<4;i++){
        for(uint8_t j=0;j<4;j++){
            module_general_reg.general_output_action_reg.dio[i].actions[j].pin_name=i;      //A0-A3
            module_general_reg.general_output_action_reg.dio[i].actions[j].voltage_type=0;//低压
            module_general_reg.general_output_action_reg.dio[i].actions[j].output_type = 0;//电平
            module_general_reg.general_output_action_reg.dio[i].actions[j].freq_num = 2;//500Hz
            module_general_reg.general_output_action_reg.dio[i].actions[j].duty_cycle = 10*(j+1);//50%
        }
    }
    
    module_general_reg.general_time_condition_reg.conditions[0].operate_symbol=0;//<1秒
    module_general_reg.general_time_condition_reg.conditions[0].threshold = 1000;

    module_general_reg.general_time_condition_reg.conditions[1].operate_symbol=1;//=1秒
    module_general_reg.general_time_condition_reg.conditions[1].threshold = 2000;

    module_general_reg.general_time_condition_reg.conditions[2].operate_symbol=2;//>1秒
    module_general_reg.general_time_condition_reg.conditions[2].threshold = 3000;

    module_general_reg.general_time_condition_reg.conditions[3].operate_symbol=3;//<=1秒
    module_general_reg.general_time_condition_reg.conditions[3].threshold = 4000;

    module_general_reg.general_time_condition_reg.conditions[4].operate_symbol=4;//>=1秒
    module_general_reg.general_time_condition_reg.conditions[4].threshold = 5000;

    module_general_reg.general_time_condition_reg.conditions[5].operate_symbol=5;//!=1秒
    module_general_reg.general_time_condition_reg.conditions[5].threshold = 6000;

    module_general_reg.general_time_condition_reg.conditions[6].operate_symbol=0;//小于1秒
    module_general_reg.general_time_condition_reg.conditions[6].threshold = 8000;

    module_general_reg.general_time_condition_reg.conditions[7].operate_symbol=1;//小于1秒
    module_general_reg.general_time_condition_reg.conditions[7].threshold = 9000;


    // for(uint8_t i=0;i<8;i++){
    //     module_general_reg.general_time_condition_reg.conditions[i].value=0x401;//大于1秒
    // }
    for(uint8_t i=0;i<sizeof(module_general_reg.general_condition_and_action_reg.conditions)/sizeof(auto_mode_condition_and_action_t);i++){
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_input_condition[0].en=1;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_input_condition[0].num = i;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_input_condition[1].en=0;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_input_condition[1].num = i;
        
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_time_condition.sn0 = i;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_time_condition.en0 = 1;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_time_condition.sn1 = i;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_time_condition.en1 = 0;
        
        
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_output_action[0].num = i;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_output_action[0].en = 1;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_output_action[1].num = i;
        module_general_reg.general_condition_and_action_reg.conditions[i].logic_output_action[1].en = 0;
    }

    //写入默认配置到EEPROM
    for(uint8_t i=(DATA_STORAGE_HEADER_REG_SIZE);i<(DATA_STORAGE_HEADER_REG_SIZE+DATA_STORAGE_GENERAL_REG_SIZE);i++){
        EEPROM.write(i, module_general_reg.data[i-DATA_STORAGE_HEADER_REG_SIZE]);
    }
    //写入0x55AA激活配置
    EEPROM.write(DATA_STORAGE_STATUS_EOF_ADDRESS,0xAA);
    EEPROM.write(DATA_STORAGE_STATUS_EOF_ADDRESS+1,0x55);
}

void DataStorageIO::check_update()
{
    bool _update = false;

    for(uint32_t i=0;i<data_storage_header_size();i++){
        if(!_mb.empty()){
            return;
        }
        if(EEPROM.read(i) !=  module_header_reg().data[i]){
            _update = true;
            break;
        }
    }

    if(_update){
        for(uint32_t i=0;i<data_storage_header_size();i++){
            if(!_mb.empty()){
                return;
            }
            EEPROM.write(i, module_header_reg().data[i]);
        }
        //log::debug("update eeprom header:%s\r\n",_update?"Y":"N");
    }

    _update = false;
    
    module_general_reg_t& module_general_reg = DataStorageIO::module_reg().module_general_reg;
    for(uint8_t i=DATA_STORAGE_HEADER_REG_SIZE;i<(DATA_STORAGE_HEADER_REG_SIZE+DATA_STORAGE_GENERAL_REG_SIZE);i++){
        if(!_mb.empty()){
            return;
        }
        
        if(EEPROM.read(i) !=  module_general_reg.data[i-DATA_STORAGE_HEADER_REG_SIZE]){
            _update = true;
            log::debug("Update EEPROM REG:%d:(%x:%x)\r\n",i,EEPROM.read(i),module_general_reg.data[i-DATA_STORAGE_HEADER_REG_SIZE]);
            break;
        }
    }

    if(_update){
        //写入默认配置到EEPROM
        for(uint8_t i=(DATA_STORAGE_HEADER_REG_SIZE);i<(DATA_STORAGE_HEADER_REG_SIZE+DATA_STORAGE_GENERAL_REG_SIZE);i++){
            if(!_mb.empty()){
                return;
            }
            EEPROM.write(i,module_general_reg.data[i-DATA_STORAGE_HEADER_REG_SIZE]);
        }
        log::debug("update eeprom reg:%s\r\n",_update?"Y":"N");
    }

}



data_storage_reg_read_t& DataStorageIO::get_reg_data(uint8_t reg_address)
{
    switch (reg_address)
    {
        case 0x00:
        case 0x01:
        {
            _reg_read.data    =  module_header_reg().module_number.data;
            _reg_read.size    = sizeof( module_header_reg().module_number.data);
        }
        break;
        case 0x02:
        {
            _reg_read.data    =  module_header_reg().hardware_version_data;
            _reg_read.size    = sizeof( module_header_reg().hardware_version_data);
        }
        break;
        case 0x03:
        {
            _reg_read.data    =  module_header_reg().software_version_data;
            _reg_read.size    = sizeof( module_header_reg().software_version_data);
        }
        break;
        case 0x04:
        {
            _reg_read.data    =  module_header_reg().module_type_data;
            _reg_read.size    = sizeof( module_header_reg().module_type_data);
        }
        break;
        case 0x05:
        case 0x06:
        {
            _reg_read.data    =  module_header_reg().protocol_data;
            _reg_read.size    = sizeof( module_header_reg().protocol_data);
        }
        break;
        case 0x07:
        {
            _reg_read.data    =  module_header_reg().module_name;
            _reg_read.size    = 15;
        }
        break;
        case 0x40://只写
        break;
        case 0x41://中断-需要清除
        {
            _reg_read.data    =          module_reg().module_general_reg.slave_interrupt_reg.data;
            _reg_read.size    = sizeof( module_reg().module_general_reg.slave_interrupt_reg.data);
        }
        break;
        case 0x42://只写
        break;
        case 0x43://模式选择
        {
            _reg_read.data    =          module_reg().module_general_reg.mode_select_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.mode_select_reg.data);
         }
        break;
        case 0x44://IO输入输出
        {
            _reg_read.data    =          module_reg().module_general_reg.io_direction_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.io_direction_reg.data);
        }
        break;
        case 0x45://IO类型
        {
            _reg_read.data    =          module_reg().module_general_reg.io_type_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.io_type_reg.data);
        }
        break;
        case 0x46://电压
        {
            _reg_read.data    =          module_reg().module_general_reg.io_voltage_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.io_voltage_reg.data);
        }
        break;
        case 0x47://条件动作使能
        {
            _reg_read.data    =          module_reg().module_general_reg.condition_action_enable_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.condition_action_enable_reg.data);
        }
        break;
        case 0x48://保留
        break;
        case 0x49://A口高低电平
        {
            _reg_read.data    =          module_reg().module_general_reg.aio_level_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.aio_level_reg.data);
        }
        break;
        case 0x4A://D口高低电平
        {
            _reg_read.data    =          module_reg().module_general_reg.dio_level_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.dio_level_reg.data);
        }
        break;
        case 0x4B://A口模拟量
        {
            module_reg().module_general_reg.ain_reg.A0.value = analogRead(PC_0);
            module_reg().module_general_reg.ain_reg.A1.value = analogRead(PC_1);
            module_reg().module_general_reg.ain_reg.A2.value = analogRead(PC_2);
            module_reg().module_general_reg.ain_reg.A3.value = analogRead(PC_3);
            _reg_read.data    =          module_reg().module_general_reg.ain_reg.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.ain_reg.data);
        }
        break;
        case 0x54://D口PWM
        {
            _reg_read.data    =          module_reg().module_general_reg.pwm_reg.freq.data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.pwm_reg.freq.data);
        }
        break;
        case 0x55://  D口PWM_duty0:0x55
        {
            _reg_read.data    =          &module_reg().module_general_reg.pwm_reg.duty_cycle.data[0];
            _reg_read.size    =  1;
        }
        break;
        case 0x56://  D口PWM_duty0:0x55
        {
            _reg_read.data    =          &module_reg().module_general_reg.pwm_reg.duty_cycle.data[1];
            _reg_read.size    =  1;
        }
        break;
        case 0x57://  D口PWM_duty0:0x55
        {   
            _reg_read.data    =          &module_reg().module_general_reg.pwm_reg.duty_cycle.data[2];
            _reg_read.size    =  1;
        }
        break;
        case 0x58://  D口PWM_duty0:0x55
        { 
            _reg_read.data    =          &module_reg().module_general_reg.pwm_reg.duty_cycle.data[3];
            _reg_read.size    =  1;
        }
        break;
        case 0x5B://输入条件-A00
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A0[0].data;
            _reg_read.size    =         sizeof(module_reg().module_general_reg.general_input_condition_reg.A0[0].data);
        }
        break;
        case 0x5D://输入条件-A01
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A0[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A0[1].data);
        }
        break;
        case 0x5F://输入条件-A02
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A0[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A0[2].data);
        }
        break;
        case 0x61://输入条件-A03
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A0[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A0[3].data);
        }
        break;
        case 0x63://输入条件-A10
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A1[0].data;
            _reg_read.size    =         sizeof(module_reg().module_general_reg.general_input_condition_reg.A1[0].data);
        }
        break;
        case 0x65://输入条件-A11
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A1[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A1[1].data);
        }
        break;
        case 0x67://输入条件-A12
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A1[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A1[2].data);
        }
        break;
        case 0x69://输入条件-A13
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A1[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A1[3].data);
        }
        break;

         case 0x6B://输入条件-A20
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A2[0].data;
            _reg_read.size    =         sizeof(module_reg().module_general_reg.general_input_condition_reg.A2[0].data);
        }
        break;
        case 0x6D://输入条件-A21
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A2[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A2[1].data);
        }
        break;
        case 0x6F://输入条件-A22
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A2[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A2[2].data);
        }
        break;
        case 0x71://输入条件-A23
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A2[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A2[3].data);
        }
        break;

         case 0x73://输入条件-A30
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A3[0].data;
            _reg_read.size    =         sizeof(module_reg().module_general_reg.general_input_condition_reg.A3[0].data);
        }
        break;
        case 0x75://输入条件-A31
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A3[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A3[1].data);
        }
        break;
        case 0x77://输入条件-A32
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A3[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A3[2].data);
        }
        break;
        case 0x79://输入条件-A33
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.A3[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.A3[3].data);
        }
        break;

        case 0x7B://输出动作-D00
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[0].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[0].data);
        }
        break;
        case 0x7D://输出动作-D01
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[1].data);
        }
        break;
        case 0x7F://输出动作-D02
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[2].data);
        }
        break;
        case 0x81://输出动作-D03
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[3].data);
        }
        break;
        case 0x83://输出动作-D10
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[4].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[4].data);
        }
        break;
        case 0x85://输出动作-D11
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[5].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[5].data);
        }
        break;
        case 0x87://输出动作-D12
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[6].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[6].data);
        }
        break;
        case 0x89://输出动作-D13
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[7].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[7].data);
        }
        break;
        case 0x8B://输出动作-D20
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[8].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[8].data);
        }
        break;
        case 0x8D://输出动作-D21
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[9].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[9].data);
        }
        break;
        case 0x8F://输出动作-D22
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[10].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[10].data);
        }
        break;
        case 0x91://输出动作-D23
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[11].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[11].data);
        }
        break;
        case 0x93://输出动作-D30
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[12].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[12].data);
        }
        break;
        case 0x95://输出动作-D31
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[13].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[13].data);
        }
        break;
        case 0x97://输出动作-D32
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[14].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[14].data);
        }
        break;
        case 0x99://输出动作-D33
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.actions[15].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.actions[15].data);
        }
        break;
        case 0x9B://时间条件0
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[0].data;
            _reg_read.size    = 3;
        }
        break;
        case 0x9E://时间条件1
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[1].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xA1://时间条件2
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[2].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xA4://时间条件3
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[3].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xA7://时间条件4
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[4].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xAA://时间条件5
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[5].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xAD://时间条件6
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[6].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xB0://时间条件7
        {
            _reg_read.data    =          module_reg().module_general_reg.general_time_condition_reg.conditions[7].data;
            _reg_read.size    = 3;
        }
        break;
        case 0xB3://条件和动作-0
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[0].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[0].data);
        }
        break;
        case 0xB8://条件和动作-1
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[1].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[1].data);
        }
        break;
        case 0xBD://条件和动作-2
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[2].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[2].data);
        }
        break;
        case 0xC2://条件和动作-3
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[3].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[3].data);
        }
        break;
        case 0xC7://条件和动作-4
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[4].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[4].data);
        }
        break;
        case 0xCC://条件和动作-5
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[5].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[5].data);
        }
        break;
        case 0xD1://条件和动作-6
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[6].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[6].data);
        }
        break;
        case 0xD6://条件和动作-7
        {
            _reg_read.data    =          module_reg().module_general_reg.general_condition_and_action_reg.conditions[7].data;
            _reg_read.size    =sizeof(module_reg().module_general_reg.general_condition_and_action_reg.conditions[7].data);
        }
        break;

         case 0xE1://输入条件-A0
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.a0_data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.a0_data);
        }
        break;
        case 0xE2://输入条件-A1
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.a1_data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.a1_data);
        }
        break;
        case 0xE3://输入条件-A2
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.a2_data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.a2_data);
        }
        break;
        case 0xE4://输入条件-A3
        {
            _reg_read.data    =          module_reg().module_general_reg.general_input_condition_reg.a3_data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_input_condition_reg.a3_data);
        }
        break;  
         case 0xE5://输出动作-D0
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.dio[0].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.dio[0].data);
        }
        break;
        case 0xE6://输出动作-D1
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.dio[1].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.dio[1].data);
        }
        break;
        case 0xE7://输出动作-D2
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.dio[2].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.dio[2].data);
        }
        break;
        case 0xE8://输出动作-D3
        {
            _reg_read.data    =          module_reg().module_general_reg.general_output_action_reg.dio[3].data;
            _reg_read.size    = sizeof(module_reg().module_general_reg.general_output_action_reg.dio[3].data);
        }
        break;
    default:
    {
        _reg_read.data = (uint8_t*)"NG";
        _reg_read.size = 2;
    }
    break;
    }
    //log::debug("id:%x:%d\r\n",reg_address,_reg_read.size);
    return _reg_read;
}